package org.nfIt.utils;

import org.nfIt.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * ClossName:MenuHelper
 * Pakage:org.nfIt.utils
 * Description
 *
 * 菜单工具类
 *
 * @Author L
 * @Create 2024/6/24 19:45
 * @Version 2023.1.3
 */
public class MenuHelper {

//    /**
//     * 使用递归方法建菜单
//     * @param sysMenuList
//     * @return
//     */
//    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
//        //sysMenuList所有菜单集合
//        //创建list集合用于封装最终数据
//        List<SysMenu> trees = new ArrayList<>();
//        //遍历所有菜单集合
//        for (SysMenu sysMenu : sysMenuList) {
//            //找到递归操作入口,第一层的菜单
//            //条件是：parent_id = 0 表示第一层的菜单
//            if (sysMenu.getParentId().longValue() == 0) {
//                //根据第一层找下一层数据,使用递归完成
//                //写方法实现找下层过程,方法传递两个参数：sysMenu ：当前第一层的菜单 , sysMenuList : 所有菜单集合
//                trees.add(findChildren(sysMenu,sysMenuList));
//            }
//        }
//        return trees;
//    }
//
//    /**
//     * 递归查找子节点
//     * @param treeNodes
//     * @return
//     */
//    public static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> treeNodes) {
//        sysMenu.setChildren(new ArrayList<SysMenu>());
//        for (SysMenu it : treeNodes) {
//            if(sysMenu.getId().longValue() == it.getParentId().longValue()) {
//                //if (sysMenu.getChildren() == null) {
//                //    sysMenu.setChildren(new ArrayList<>());
//                //}
//                sysMenu.getChildren().add(findChildren(it,treeNodes));
//            }
//        }
//        return sysMenu;
//    }
//递归实现封装过程
public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
    //sysMenuList所有菜单集合
    //创建list集合，用于封装最终的数据
    List<SysMenu> trees = new ArrayList<>();
    //遍历所有菜单集合
    for(SysMenu sysMenu:sysMenuList) {
        //找到递归操作入口，第一层的菜单
        //条件： parent_id=0
        if(sysMenu.getParentId().longValue()==0) {
            //根据第一层，找下层数据，使用递归完成
            //写方法实现找下层过程，
            // 方法里面传递两个参数：第一个参数当前第一层菜单，第二个参数是所有菜单集合
            trees.add(findChildren(sysMenu,sysMenuList));
        }
    }
    return trees;
}

    //递归查找下层菜单
    public static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
        // SysMenu有属性 private List<SysMenu> children;封装下一层数据
        sysMenu.setChildren(new ArrayList<>());
        //递归查询
        // sysMenu的id值 和  sysMenuList中parentId相同
        for(SysMenu it:sysMenuList) {
            //判断id 和  parentid是否相同
            if(sysMenu.getId().longValue() == it.getParentId().longValue()) {
                // it就是下层数据，进行封装
                sysMenu.getChildren().add(findChildren(it,sysMenuList));
            }
        }
        return sysMenu;
    }
}
